package com.sh.diy;

import java.util.concurrent.TimeUnit;

/**
 * 入口
 */
public class Main {
    public static void main(String[] args) {

        // 创建自定义的线程池（也就是实例化类）

        /**
         * new MyBlockQueue<>(5) 实例化阻塞队列，队列长度为5
         * 2 核心线程数
         * 5 超时时间
         * TimeUnit.SECONDS 超时时间单位
         * 实现拒绝策略的接口
         */
        MyThreadPool myThreadPool = new MyThreadPool(new MyBlockQueue<>(5), 2, 5, TimeUnit.SECONDS, new MyRejectPolicy<Runnable>() {
            @Override
            public void reject(MyBlockQueue<Runnable> myBlockQueue, Runnable task) {
                // 拒绝策略：
                // 一直等（阻塞等待）
//                    myBlockQueue.put(task);
                // 调用者直接执行任务
                    task.run();
                // 直接抛出异常
//                    throw new RuntimeException("zfp");
                // 丢弃这个任务
//                System.out.println("丢弃这个任务" + task);
            }
        });

//        myThreadPool.execute(new Runnable() {
//            // 提交一个简单的任务：张三去打水......
//            @Override
//            public void run() {
//                System.out.println("张三去打水......");
//            }
//        });
        // 更多任务
        for (int i = 0; i < 10; i++) {
            final int taskId = i;
            myThreadPool.execute(() -> {
                System.out.println("任务 " + taskId + " 执行中...");
            });
        }

    }
}
